Conventional storage arrays make use of a variety of device types for storing data. Such device types include Fibre Channel disk drives, SATA disk drives, and solid state drives (SSDs) of various speeds, for example.
As is known, storage arrays commonly include “redundant groups” of storage elements, i.e., groups of storage elements bound together with some level of redundancy among the group members, such that some number of storage elements can fail without the redundant group as a whole suffering permanent data loss. The “storage elements” that form a redundant group are disk drives, SSDs, other drive types, portions thereof, or combinations of any of the foregoing. Common examples of such redundant groups include certain RAID groups (RAID is an acronym for Redundant Array of Independent Disks), as well as other redundant storage groupings. A storage array typically includes many such redundant groups. A typical redundant group may include “N” different storage elements. Erasure coding is applied to the data on the storage elements to provide fault tolerance, such that the redundant group can suffer the loss of any N-K storage elements and continue to function normally, i.e., as long as at least “K” storage elements remain. With each storage element lost to a failure, however, the fault tolerance of the redundant group decreases, as the redundant group can suffer fewer losses of storage elements before permanent data loss occurs.
Typically, when a storage element of a redundant group fails, the array reaches into a reserve of storage devices (e.g., disk drives and/or SSD's, which are kept on standby) and creates a spare storage element from those devices to replace the failed element. The array then typically repairs the redundant group, by binding the selected spare storage element to the redundant group, regenerating data for the failed storage element from the remaining operating storage elements, and storing the regenerated data on the spare. With the failed storage element replaced and the data from the failed storage element regenerated, the fault tolerance of the redundant group is restored to its original value. Typically, failed storage elements are replaced with spare storage elements that are exact matches, i.e., that have the same size, speed, and device type as the failed storage elements.